home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / sky3dngn / 3dengine.txt < prev    next >
Text File  |  1996-10-07  |  14KB  |  295 lines

  1.  
  2.    │███      │██    ██ │██   │██ │████████ │████████ │████████ │██   │██
  3.    └┐▀▓▓▄    │▓▓  ▄▓▓  └┐▓▓ │▓▓  └──────── └──────── └──────── │▓▓   │▓▓
  4.      └┐▀▒▒▄  │▒▒▒▒▒▀    └┐▒▒▒▒      │▒▒    │▒▒▒▒▒▒▒▒ │▒▒       │▒▒▒▒▒▒▒▒
  5.        └ ▄▄▌ └──┐▀▄▄     └───       │▀▀    │▄▄ ───── │▀▀       └────────
  6.     ▄▄▄▄▓▓▓     └─┐▓▓     ▓▓        │▓▓    │▓▓▄▄▄▄▄▄ │▓▓▄▄▄▄▄▄ │▓▓   │▓▓
  7.    │▀▀▀▀▀ -       │▀▀   │▀▀         │▀▀    │▀▀▀▀▀▀▀▀ │▀▀▀▀▀▀▀▀ │▀▀   │▀▀
  8.    └─────         └──   └──         └──    └──────── └──────── └──   └──
  9.  
  10.                │████████ │██████▄  │████████  ██   ██ │██████▄
  11.                │▓▓       └────┐▓▓▓ └──────── │▓▓  │▓▓ └────┐▓▓▓
  12.                │▒▒       │▒▒▒▒▒▒▄  │▒▒    ▒▒ │▒▒  │▒▒  ▓▓▓▓▓▓▀
  13.                │▀▀   │▀▀ └───┐▀▄▄  │▀▀    ▀▀ │▄▄▄ │▄▄ │▄▄  ──
  14.                │▓▓▄▄▄▄▓▓     └┐▓▓  │▓▓▄▄▄▄▓▓ │▀▓▓▓▓▓▓ │▓▓
  15.                │▀▀▀▀▀▀▀▀      │▀▀  │▀▀▀▀▀▀▀▀ └─┐ ▀▀▀▀ │▀▀
  16.                └────────      └──  └────────   └───── └──
  17.  
  18.                     · ··---───==≡≡ Presents ≡≡==──----·· ·
  19.  
  20. 3DEngine
  21.  
  22.    Current Version : v1.0
  23.  
  24.    3D Graphic Engine For The SkyTecH GrOuP
  25.  
  26.    By The Unknown One
  27.  
  28.    14/08/96
  29.       --
  30.    01/10/96
  31.  
  32.    Index
  33.  
  34.      Introduction
  35.                                                       Introduction à 3DEngine
  36.      Structure POO
  37.                                               Description de la structure POO
  38.      Fichiers
  39.                                                  Description des fichiers 3DT
  40.      Les calculs vectoriels
  41.                                         Description des méthodes de calcul 3D
  42.      La 3D
  43.                                   Algorythmes et méthodes de developpement 3D
  44.      Animation
  45.                                       Description des méthodes d'animation 3D
  46.  
  47.      Tout le texte suivant se rapporte à 3DEngine v1.0. Pour les autres
  48.    versions, le numéro de version est précisé avant le texte.
  49.  
  50. Introduction
  51. ─────────────────────────────────────────────────────────────────────────────
  52.  
  53.       3DEngine a pour but de devenir LE moteur graphique 3D de SkyTecH,
  54.     et ce pour tous les développements à venir (démos, jeux, programmes
  55.     ou autres).
  56.       3DEngine doit pour cela être doté d'une gestion à la fois simple,
  57.     puissante, et  facile à intégrer dans un  projet, quelqu'en soit la
  58.     nature. De plus, le code doit pouvoir être maintenu à jour par tous
  59.     les programmeurs du SkyTecH GrOuP le plus facilement possible. Ceci
  60.     requiert donc une grande lisibilité et clareté du code source. D'où
  61.     le choix de la Programmation Orientée Objet (POO).
  62.       De plus,3DEngine doit pouvoir permettre l'utilisation de nombreux
  63.     mode d'affichage pour les objets, donc de lissages, texturages, ...
  64.     le plus nombreux possible,d'où la necessité "d'entretient" du code.
  65.  
  66. Structure POO
  67. ─────────────────────────────────────────────────────────────────────────────
  68.  
  69.       Cette POO se présente de la manière suivante :
  70.         - un  objet principal, destiné  à la gestion  général du  monde
  71.           virtuel géré par 3DEngine : l'objet TWORLD.
  72.         - un objet secondaire, destiné à gérer les vues du monde 3D des
  73.           objets  TWORLD. Cet objet est  en fait scindé en  deux objets
  74.           distincts :
  75.              ■ l'objet  TCAMERA, destiné à gérer les  vues de caméra en
  76.                mouvement (pas de Z_BUFFER)
  77.              ■ l'objet  TFIXEDVIEW, destiné à gérer  les vues fixes des
  78.                mondes (repère fixé, gestion de Z_BUFFER)
  79.           ces objets sont indépendant du premier,car ils peuvent servir
  80.           à plusieurs mondes en même temps...
  81.         - un objet  TLIST destiné à faire la liste  des objets déclarés
  82.           dans un monde
  83.         - un objet TPATH destiné à l'animation des objets
  84.         - enfin, un objet T3DObject, en  fait un RECORD, car les objets
  85.           n'ont pas à s'auto-gérer, car  ils le sont par l'objet TWORLD
  86.           qui se  sert des  informations contenues  par ce RECORD  pour
  87.           effectuer toutes le opérations necessaire.
  88.  
  89.       De  plus, il est  important de  signaler que  les données  3D des
  90.     objets ne sont EN AUCUN CAS  modifiées par une fonction. Ainsi, les
  91.     données étant toujours invariables et donc sûres, nous pouvons nous
  92.     permettre de dupliquer un objet  en donnant l'adresse de ses points
  93.     à un autre  objet, qui alors  prends l'apparence  de celui-ci. Ceci
  94.     permet de  réaliser des gains de mémoire non  négligeables, et sans
  95.     de vitesse pour le moteur 3D.
  96.  
  97.   Fonctions Utilitaires
  98.  
  99.       3DEngine doit mettre à disposition de l'utilisateur de nombreuses
  100.     fonctions utilitaires pour  être à même de réaliser tous les effets
  101.     voulus.
  102.       Parmis ces fonctions se trouvent :
  103.  
  104.         - DuplicateObj : Crée un double d'un objet, possédant les mêmes
  105.                          caractéristiques, les  mêmes buffers  pour les
  106.                          points, les  faces,... mais bénéficiant  d'une
  107.                          gestion propre des translations, rotations,...
  108.         - TranslateObj : Effectue une translation XYZ sur un objet
  109.         - RotateObj    : Effectue une rotation XYZ sur un objet
  110.         - ScaleObj     : Effectue un Scale XYZ sur un objet
  111.         - TranslateUni : Effectue une  translation, utilisant les mêmes
  112.                          valeurs pour X, Y, et Z sur un objet
  113.         - RotateUni    : Effectue une rotation avec les mêmes valeurs
  114.                          pour X, Y, et Z sur un objet
  115.         - ScaleUni     : Effectue un Scale  avec les mêmes valeurs pour
  116.                          X, Y, et Z sur un objet (scale uniforme)
  117.  
  118.   Description des objets
  119.  
  120.       Les descriptions suivantes ont pour but d'expliquer le contenu de
  121.     chaque objet disponible dans 3DEngine et leur fonctionnement.
  122.  
  123.     L'objet 3DObject
  124.  
  125.       Cet objet est la base même de ce moteur 3D. En effet, il contient
  126.     toutes les  informations se rapportant à  un objet, aussi  bien les
  127.     coordonnées  de ses points  que les buffers  necessaires ou le type
  128.     de mapping à  appliquer à cet objet. Ainsi, il  contient toutes les
  129.     informations  necessaires à  sa gestion  dans un monde  en 3D, mais
  130.     aussi dans le monde 2D!
  131.       Les informations de 3DObject sont :
  132.         - X,Y,Z            : LongInt avec les valeurs de translation
  133.         - RX,RY,RZ         : Integer avec les valeurs de rotation
  134.         - Points           : Pointeur sur les coordonnées 3D de l'objet
  135.                              (COORDONNEES NON TRANSFORMEES!)
  136.                              Format : [X,Y,Z,X,Y,Z,...] avec X, Y, et Z
  137.                              en LongInt (32Bits)
  138.         - Faces            : Pointeur  sur les  numéro des  points  des
  139.                              faces de l'objet
  140.                              Format : [A,B,C,A,B,C,...] avec A, B, et C
  141.                              en Word (16Bits)
  142.                              Les faces ne contiennent que 3 POINTS!!!
  143.         - Col              : Pointeur  sur les informations  de couleur
  144.                              de chaque point
  145.                              Format : [A,A,A,...] avec A en LongInt
  146.         - ZList            : Pointeur  sur les  valeurs moyennes  Z des
  147.                              faces de  l'objet pour le tri en  vue fixe
  148.                              Format : [Z,Z,Z,...] avec Z en LongInt
  149.         - TransPoints      : Pointeur sur les coordonnées 3D des points
  150.                              de l'objet TRANSFORMES!
  151.                              Format : Voir "Points"
  152.         - Points2D         : Pointeur sur un buffer  de projection pour
  153.                              les valeurs 2D des points de l'objet
  154.                              Format : [X,Y,X,Y,...] avec X et Y en Word
  155.         - MappingType      : Word contenant le type de mapping pour
  156.                              l'objet ainsi que ses attributs (cf "Algos
  157.                              Utilisés")
  158.         - NbFaces          : Word contenant le nombre de faces
  159.         - NbPoints         : Word contenant le nombre de points
  160.  
  161.  
  162. Fichiers
  163. ─────────────────────────────────────────────────────────────────────────────
  164.  
  165.       Un moteur 3D  necessite  l'implémentation d'un  format de fichier
  166.     pour stocker les données des objets et autres. Le format de fichier
  167.     retenu pour 3DEngine est le 3DT (3D Dad'n'TuO).
  168.       Ce format offre en effet plusieurs avantages non négligeables :
  169.         - il  est en  binaire, ce qui crée  un gain de place  énorme et
  170.           un vitesse de lecture accrue
  171.         - il a été créé par le SkyTecH  GrOuP, donc les droits lui sont
  172.           acquis
  173.         - sa structure  lui permet une grande  facilité d'adaptation et
  174.           d'amélioration
  175.  
  176.       Pour plus  d'informations sur  le format 3DT, reportez  vous à la
  177.     section "Format 3DT".
  178.  
  179.       Pour une plus grande souplesse  d'utilisation, 3DEngine doit donc
  180.     se munir d'outils de conversion de formats divers vers le 3DT. Plus
  181.     le nombre de convertisseur sera élevé, plus la facilité de création
  182.     des mondes  3D sera  accrue. Bien  entendue, un  convertisseur DOIT
  183.     fonctionner dans les deux sens.Les formats suivant doivent disposer
  184.     de leur convertisseur :
  185.       - DXF : Format de fichier universel
  186.       - 3DS : Format de fichier 3DStudio, bon modeleur
  187.  
  188. Les calculs vectoriels
  189. ─────────────────────────────────────────────────────────────────────────────
  190.  
  191.   Les nombres en virgule fixe
  192.  
  193.       Il existe deux types de calculs en virgule fixe que 3DEngine doit
  194.     effectuer : les  calculs internes (fonctions  triangle,...) et  les
  195.     calculs  généraux. Pour des raisons  d'optimisation, les calculs en
  196.     virgule fixe  internes sont executés en 16.16 bits, car  ceci offre
  197.     plusieurs avantages: non seulement ils offrent une grande précision
  198.     mais en plus il sont les plus rapides à gérer en interne sans avoir
  199.     à recourir à une unité spécialisée.
  200.       Par contre, les  calculs généraux en virgule  fixe doivent passer
  201.     par un  module spécialisée  dans les calculs virgule  fixe. Pour la
  202.     valeur  de division, il  faut compter  9bits (512)  pour avoir  une
  203.     précision suffisante sans pour autant réclamer trop de mémoire.
  204.  
  205.   Les calculs vectoriels
  206.  
  207.       Ces calculs peuvent passer par le module de virgule fixe pour
  208.     les calculs ayant besoin de précision.
  209.  
  210.   Le module MATH
  211.  
  212.       Ce module doit regrouper toutes les fonctions de calcul(vectoriel
  213.     et fixe) pour pouvoir être à la disposition de toutes les fonctions
  214.     pouvant en avoir besoin.
  215.       Ce module doit  evidemment être écrit en  ASSEMBLEUR pour un gain
  216.     de vitesse substantielle lors de calculs 3D.
  217.  
  218. La 3D
  219. ─────────────────────────────────────────────────────────────────────────────
  220.  
  221.   Les algorythmes utilisés
  222.  
  223.       Le but de 3DEngine étant d'être  le plus complet possible tout en
  224.     êtant aussi le plus rapide. Pour cela, un grand nombre de lissages,
  225.     de méthodes de mapping de texture ou autre doit être implémenté.
  226.       De plus, un grand nombre de ces fonctions se présentent en double
  227.     ou en triple, mais  en fait avec des versions  différentes les unes
  228.     des autres : certaines sont plus rapides que d'autres,ces dernières
  229.     étant  alors plus juste du  point de vue du calcul 3D. Ceci  permet
  230.     donc "d'optimiser" l'affichage d'un monde 3D: les objets peu ou pas
  231.     détaillés ne  necessitant pas un lissage  parfait seront alors plus
  232.     rapides à  afficher, entrainant  donc une acceleration  générale du
  233.     monde  3D. Toutefois, l'appréciation est  laissée aux développeurs,
  234.     car il n'est pas possible d'imposer une méthode pour un objet.
  235.  
  236.       Voici donc la liste des lissages et texture mapping prévus :
  237.  
  238.       - INVISIBLE (Tout simplement ignoré)
  239.       - DOTS (Les points affichés)
  240.       - Z_DOTS (Les points affichés, couleurs suivant Z)
  241.       - WIRE (En Wireframe - Fil de fer)
  242.       - FLAT (Face pleine;Gestion de l'illumination)
  243.       - GOURAUD (Méthode de Gouraud d'interpolation linéaire)
  244.       - Z_GOURAUD (Méthode de Gouraud en fonction de Z)
  245.       - PHONG (Méthode de Phong d'interpolation linéaire)
  246.       - TEXTMAP (Méthode de mapping 2D sur une surface)
  247.       - TEXTMAP3D (Méthode de mapping 3D sur une surface)
  248.       - GOURAUD MAPPING (Mapping de texture 2D avec Gouraud)
  249.       - Z_GOURAUD MAPPING (Mapping de texture 2D avec Z_GOURAUD)
  250.       - PHONG MAPPING (Mapping de texture 2D avec Phong)
  251.       - GOURAUD MAPPING 3D (Mapping de texture 3D avec Gouraud)
  252.       - Z_GOURAUD MAPPING 3D (Mapping de texture 3D avec Z_GOURAUD)
  253.       - PHONG MAPPING 3D (Mapping de texture 3D avec Phong)
  254.       - ENVIRONNEMENT MAPPING (Mapping d'environement)
  255.  
  256.       De plus, plusieurs attributs se rajouteront à ces fonctions,
  257.     certains étant cumulables, d'autres non...
  258.  
  259.       - Z_BUFFER (Gestion d'un Z_BUFFER)
  260.       - TRANSPARENT (Gestion de la transparence)
  261.       - INVISIBLE (L'objet n'est pas tracé; Cet attribut fait double
  262.                    usage avec le mode INVISIBLE, mais il permet de
  263.                    faire disparaitre des objets sans perdre leur type
  264.                    de mapping)
  265.  
  266.   Le tri des faces
  267.  
  268.       Le tri des faces étant un point  important d'un moteur 3D, car il
  269.     détermine sa  vitesse par sa qualité et  sa rapidité, il mérite une
  270.     étude approfondie du sujet. Toutefois,le but de cette documentation
  271.     n'est pas de fournir un catalogue  d'algorythmes, mais une solution
  272.     pour la création d'un moteur 3D.
  273.       Voici donc la description  de l'algorythme utilisé, avec toute la
  274.     justification pour son choix.
  275.  
  276.     [...]
  277.  
  278. Animations
  279. ─────────────────────────────────────────────────────────────────────────────
  280.  
  281.   KeyFrame
  282.  
  283.       3DEngine se veut aussi un  puissant module d'animation temps réel
  284.     des  objets  3D. Ceci  veut dire que les  possibilités  d'animation
  285.     doivent être simple  d'utilisation, tout en offrant de très grandes
  286.     possiblités.
  287.       Pour cela, 3DEngine doit être doté d'un système de "KeyFrame" qui
  288.     permet une gestion poussée des mouvements d'un objet dans un monde
  289.     3D, et ce par l'intermediaire des transformations usuelles.
  290.       Toutefois,3DEngine se voit pour le moment réduit aux translations
  291.     et aux rotations.
  292.  
  293.  
  294.  
  295.